Benjamin Otte [Fri, 15 Feb 2013 18:14:25 +0000 (19:14 +0100)]
x11: Use usual Atom handling in xsettings code
Benjamin Otte [Fri, 15 Feb 2013 17:20:18 +0000 (18:20 +0100)]
x11: Consolidate root window event setting in one place
No need to duplicate things in xsettings code.
Benjamin Otte [Fri, 15 Feb 2013 17:02:51 +0000 (18:02 +0100)]
x11: Remove unused argument
Benjamin Otte [Thu, 14 Feb 2013 16:20:26 +0000 (17:20 +0100)]
x11: Store GDK name in xsettings hash table
The X name is only used while reading the property, so no need to keep
it.
Benjamin Otte [Thu, 14 Feb 2013 14:10:18 +0000 (15:10 +0100)]
x11: Remove XSettingsAction type
Use GdkSettingAction instead.
Benjamin Otte [Thu, 14 Feb 2013 14:06:56 +0000 (15:06 +0100)]
x11: Make xsettings callbacks code go away
It's the same callbacks every time, so just move them into the source
file.
Benjamin Otte [Tue, 12 Feb 2013 19:10:23 +0000 (20:10 +0100)]
x11: Don't store name in XSettingsSetting anymore
This is in preparation to switching XSettingsSetting to GValue
Benjamin Otte [Tue, 12 Feb 2013 18:44:28 +0000 (19:44 +0100)]
x11: Use boolean instead of enum for errors in xsettings code
Benjamin Otte [Tue, 12 Feb 2013 18:35:46 +0000 (19:35 +0100)]
x11: Move error reporting to where the error happens
Also, use g_warning() instead of fprintf().
Benjamin Otte [Tue, 12 Feb 2013 18:28:41 +0000 (19:28 +0100)]
x11: Move length checking into return_if_fail() macro
Benjamin Otte [Tue, 12 Feb 2013 17:48:09 +0000 (18:48 +0100)]
x11: Use GDK error trapping code
Benjamin Otte [Tue, 12 Feb 2013 17:45:03 +0000 (18:45 +0100)]
x11: Split out xsettings string reading code
Benjamin Otte [Tue, 12 Feb 2013 15:47:45 +0000 (16:47 +0100)]
x11: Clean up xsettings header
Move private struct definitions into source file, remove unneeded C++
guards.
Benjamin Otte [Tue, 12 Feb 2013 15:31:03 +0000 (16:31 +0100)]
x11: Add debugging output for xsettings code
Benjamin Otte [Tue, 12 Feb 2013 15:11:46 +0000 (16:11 +0100)]
gdk: Add a debug category for settings
Benjamin Otte [Tue, 12 Feb 2013 13:58:44 +0000 (14:58 +0100)]
x11: Use glib malloc funcs for XSettings
Benjamin Otte [Sun, 10 Feb 2013 00:24:28 +0000 (01:24 +0100)]
x11: Call grab functions directly
... instead of going via vfuncs.
Benjamin Otte [Sun, 10 Feb 2013 00:20:38 +0000 (01:20 +0100)]
x11: Pass the GdkScreen to the XSettingsClient
Benjamin Otte [Sun, 10 Feb 2013 00:06:58 +0000 (01:06 +0100)]
x11: Fold xsettings-common.[ch] into xsettings-client.[ch]
Benjamin Otte [Sat, 9 Feb 2013 23:02:53 +0000 (00:02 +0100)]
x11: Return XSetting without copying
Benjamin Otte [Fri, 8 Feb 2013 12:36:16 +0000 (13:36 +0100)]
x11: Don't store last change serial
It's unused anyway
Benjamin Otte [Sat, 2 Feb 2013 18:22:04 +0000 (19:22 +0100)]
xsettings: Remove XSettingsList type
Use GHashTable throughout
Benjamin Otte [Sat, 2 Feb 2013 18:10:02 +0000 (19:10 +0100)]
xsettings: Use glib byte order functions
Benjamin Otte [Sat, 2 Feb 2013 14:32:23 +0000 (15:32 +0100)]
xsettings: Remove unused function
Remove xsettings_client_new() and rename
xsettings_client_new_with_grab_funcs() to xsettings_client_new()
Rob Bradford [Mon, 16 Apr 2012 15:26:19 +0000 (16:26 +0100)]
window: Fix compiler warning when not building for X11
The callback function gtk_window_on_theme_variant_changed is only used on the
X11 backend (where GtkSettings is used for the settings information.)
Fixes: https://bugzilla.gnome.org/show_bug.cgi?id=674207
Rob Bradford [Thu, 31 Jan 2013 11:25:02 +0000 (11:25 +0000)]
wayland: Synthesize fullscreen window state change
Cosimo Cecchi [Tue, 19 Feb 2013 01:50:32 +0000 (20:50 -0500)]
release: post-release version bump
Cosimo Cecchi [Tue, 19 Feb 2013 01:12:01 +0000 (20:12 -0500)]
3.7.10
Cosimo Cecchi [Mon, 18 Feb 2013 22:13:46 +0000 (17:13 -0500)]
release: update NEWS for 3.7.10
Cosimo Cecchi [Tue, 19 Feb 2013 00:30:30 +0000 (19:30 -0500)]
docs: add some missing methods
Cosimo Cecchi [Tue, 19 Feb 2013 00:21:22 +0000 (19:21 -0500)]
docs: add some missing gtk-doc blocks and Since tags for new API
Cosimo Cecchi [Tue, 19 Feb 2013 00:14:13 +0000 (19:14 -0500)]
tests: workarounds to keep treeview scrolling tests running
We can't safely examine allocations synchronously using
gtk_main_iteration(), as there might be not enough time for a new paint
clock tick to have expired and the allocation set on the widget.
Work this around adding g_usleep() calls before processing pending
mainloop events.
Torsten Schönfeld [Sun, 17 Feb 2013 13:00:10 +0000 (14:00 +0100)]
GtkViewport: annotate the adjustment args of the constructor
NULL is accepted here, so add (allow-none).
https://bugzilla.gnome.org/show_bug.cgi?id=694022
jjacky [Thu, 14 Feb 2013 18:56:54 +0000 (19:56 +0100)]
Fix #673243: accelerators not visible on GtkRadioMenu
Also fixes a bug in set_property handler, where setting group to NULL would
cause a warning.
Signed-off-by: jjacky <i.am.jack.mail@gmail.com>
Thomas Wood [Fri, 15 Feb 2013 11:16:51 +0000 (11:16 +0000)]
wayland: attempt to determine the possible parent surface for popups
Use the surface beneath the device that created the grab as the transient
parent for the popup surfaces.
https://bugzilla.gnome.org/show_bug.cgi?id=693913
Thomas Wood [Thu, 14 Feb 2013 14:44:58 +0000 (14:44 +0000)]
wayland: look further through the hierarchy for the surface with the grab
https://bugzilla.gnome.org/show_bug.cgi?id=693912
Cosimo Cecchi [Tue, 19 Feb 2013 00:37:20 +0000 (19:37 -0500)]
immodule: fix a GCC warning
Owen W. Taylor [Mon, 18 Feb 2013 20:14:53 +0000 (15:14 -0500)]
GdkWindow: don't leak the newly created frame clock
Owen W. Taylor [Mon, 18 Feb 2013 19:55:03 +0000 (14:55 -0500)]
gtk_widget_on_frame_clock_update: ref the widget
Handle a widget being destroyed while in a tick callback by
referencing the widget while dispatching tick callbacks.
Мирослав Николић [Mon, 18 Feb 2013 18:15:01 +0000 (19:15 +0100)]
Updated Serbian translation
Bastien Nocera [Mon, 18 Feb 2013 10:59:26 +0000 (11:59 +0100)]
GtkAccelLabel: Don't show "+" if there's no more keys to add
With the following code:
#define INVALID_CHAR GDK_KEY_VoidSymbol - 1
gtk_accelerator_get_label (INVALID_CHAR, GDK_SHIFT_MASK | GDK_CONTROL_MASK);
we would get this label:
Shift+Ctrl+
instead of this label:
Shift+Ctrl
https://bugzilla.gnome.org/show_bug.cgi?id=694075
Alexander Larsson [Mon, 18 Feb 2013 14:37:22 +0000 (15:37 +0100)]
win32: Request higher precision timers during animations
The default windows timer resolution is 16msec, which is too little
for fluent animations (say at 60Hz). So, while a paint clock is
active we temporarily raise the timer resolution to 1 msec.
Owen W. Taylor [Fri, 15 Feb 2013 22:04:39 +0000 (17:04 -0500)]
Add gdk_frame_clock_begin/end_updating()
Add an API to start or stop continually updating the frame clock.
This is a slight convenience for applcations and avoids the problem
of getting one more frame run after an animation stops, but the
primary motivation for this is because it looks like we might have
to use timeBeginPeriod()/timeEndPeriod() on Windows to get reasonably
accurate timing, and for that we'll need to know if there is an
animation running.
https://bugzilla.gnome.org/show_bug.cgi?id=693934
Shushi KUROSE [Mon, 18 Feb 2013 14:36:53 +0000 (23:36 +0900)]
[l10n] Update Japanese translation
Jiro Matsuzawa [Mon, 18 Feb 2013 14:32:29 +0000 (23:32 +0900)]
[l10n] Update Japanese translation
Merge the latest pot.
Alexander Larsson [Mon, 18 Feb 2013 10:23:22 +0000 (11:23 +0100)]
Remove unnecessary copy of GdkFrameClockIdlePrivate
Alexander Larsson [Mon, 18 Feb 2013 10:20:40 +0000 (11:20 +0100)]
win32: Fix build
gdkwindown-win32.c included windows.h directly rather than via gdkwin32.h
which broke the build for me at least. Instead rely on it being included in
gdkwin32.h and things work right.
Alexander Larsson [Mon, 18 Feb 2013 08:38:11 +0000 (09:38 +0100)]
GtkEntry: Fix text handle painting
We only draw the main entry on should_draw (widget->window), because
otherwise we also draw it on the GtkTextHandle widgets.
This is necessary due to the recent change for that to not return
TRUE and swallow the rest of the drawing operation.
Alexander Larsson [Mon, 18 Feb 2013 08:35:58 +0000 (09:35 +0100)]
Add a few missing gtk_widget_unregister_window calls
This was causing warnings on widget unparent like:
Gdk-CRITICAL **: gdk_window_has_native: assertion `GDK_IS_WINDOW (window)' failed
Becasue the window was not properly removed from the lists on unrealize.
Marek Černocký [Sun, 17 Feb 2013 19:06:53 +0000 (20:06 +0100)]
Updated Czech translation
Piotr Drąg [Sun, 17 Feb 2013 18:48:15 +0000 (19:48 +0100)]
Updated Polish translation
Owen W. Taylor [Sat, 16 Feb 2013 16:54:12 +0000 (11:54 -0500)]
GdkWindowX11: the root window is not a toplevel
The macros we had for checking for toplevel windows were passing
through the root window, which was not intentional and meant that
for the root window WINDOW_IS_TOPLEVEL() returned TRUE but
window->impl->toplevel was NULL, causing gdk_window_create_cairo_surface()
to crash.
Paolo Borelli [Sat, 16 Feb 2013 15:28:45 +0000 (16:28 +0100)]
[entry] unregister icon windows
Owen W. Taylor [Sat, 16 Feb 2013 03:21:21 +0000 (22:21 -0500)]
GdkFrameClockIdle: remove timeouts in dispose
When a frame clock is disposed, remove active timeouts; also get
rid of the last traces of an unused GTimer.
Owen W. Taylor [Sat, 16 Feb 2013 02:58:34 +0000 (21:58 -0500)]
GtkScrolledWindow: use gtk_widget_add_tick_callback()
This is slightly simpler and more robust than direct use of
GdkFrameClock.
Changwoo Ryu [Wed, 13 Feb 2013 02:44:00 +0000 (02:44 +0000)]
immodule: Fix context ID lookup on module with multiple contexts
https://bugzilla.gnome.org/show_bug.cgi?id=690247
Jasper St. Pierre [Sat, 16 Feb 2013 00:47:46 +0000 (19:47 -0500)]
Update gtk.symbols
Jasper St. Pierre [Sat, 16 Feb 2013 00:45:45 +0000 (19:45 -0500)]
Update gdk.symbols
Jasper St. Pierre [Sat, 16 Feb 2013 00:42:32 +0000 (19:42 -0500)]
gdkframeclockidle: Don't expose sleep_source source funcs
Jasper St. Pierre [Sat, 16 Feb 2013 00:40:46 +0000 (19:40 -0500)]
gtkplug: Remove a no-op func
Jasper St. Pierre [Sat, 16 Feb 2013 00:35:44 +0000 (19:35 -0500)]
Fix deprecations for GtkIconInfo
Jasper St. Pierre [Sat, 16 Feb 2013 00:48:48 +0000 (19:48 -0500)]
gtkicontheme: Mark copy/free compat symbols as skip
Jasper St. Pierre [Sat, 16 Feb 2013 00:33:01 +0000 (19:33 -0500)]
gdkframeclock: Fix doc comments
William Jon McCann [Fri, 15 Feb 2013 21:21:09 +0000 (16:21 -0500)]
Don't crash if inhibit is called with an unrealized window
Aurimas Černius [Fri, 15 Feb 2013 19:52:54 +0000 (21:52 +0200)]
Updated Lithuanian translation
Baurzhan Muftakhidinov [Fri, 15 Feb 2013 14:53:49 +0000 (20:53 +0600)]
Updated Kazakh translation.
Alexander Larsson [Fri, 15 Feb 2013 14:46:33 +0000 (15:46 +0100)]
Fix gtk_widget_add_tick_callback sometimes not working
We clear GtkTickCallbackInfo on creation to ensure all fields start
as 0. Before we sometimes ended up with destroyed being 1
so the tick was never called.
Alexander Larsson [Fri, 15 Feb 2013 13:02:02 +0000 (14:02 +0100)]
Fix up s/gtk_frame_clock/gdk_frame_clock/ in docs
Alexander Larsson [Fri, 15 Feb 2013 10:07:51 +0000 (11:07 +0100)]
Fix GtkIconInfo docs
gtk_icon_info_copy and gtk_icon_info_free are deprecated for
the corresponding GObject methods.
We set correct transfer markup for the GtkIconInfo returning methods
to fix the introspection of them.
gtk_icon_info_load_symbolic_for_context_async had the wrong method
name in its documentation block.
Carles Ferrando [Fri, 15 Feb 2013 00:30:17 +0000 (01:30 +0100)]
[l10n] Updated Catalan (Valencian) translation
Gil Forcada [Fri, 15 Feb 2013 00:30:07 +0000 (01:30 +0100)]
[l10n] Updated Catalan translation
Cosimo Cecchi [Thu, 14 Feb 2013 23:23:47 +0000 (18:23 -0500)]
Fix a typo in the README
Owen W. Taylor [Thu, 14 Feb 2013 22:11:28 +0000 (17:11 -0500)]
GtkContainer: fix disconnection from frame clock
We need to disconnect the frame clock when we unrealize (at which
point the old clock is still alive) not in destroy(). Since there
is no common unrealize for containers, trigger this from GtkWidget.
Owen W. Taylor [Thu, 14 Feb 2013 21:24:27 +0000 (16:24 -0500)]
GtkTickCallback: document use of G_SOURCE_CONTINUE/REMOVE for return value
Document that G_SOURCE_CONTINUE and G_SOURCE_REMOVE are the preferred
return values from a tick callback.
Owen W. Taylor [Thu, 14 Feb 2013 19:51:33 +0000 (14:51 -0500)]
Don't compress motion events for different devices
A switch of device may be significant for an application, so don't
compress motion events if they are for different devices. This simple
handling isn't sufficient if we have competing event streams from
two different pointer events, but we don't expect this case to be
common.
Owen W. Taylor [Thu, 14 Feb 2013 18:52:09 +0000 (13:52 -0500)]
Ignore window manager protocol messages for destroyed windows
If we get, for example, a _NET_WM_FRAME_DRAWN or _NET_WM_PING
message on a destroyed window, then we should just ignore it.
Owen W. Taylor [Thu, 14 Feb 2013 18:50:55 +0000 (13:50 -0500)]
Small documentation fixes for frame synchronization
Found by Benjamin Otte
Owen W. Taylor [Wed, 13 Feb 2013 13:35:05 +0000 (08:35 -0500)]
gdk_frame_clock_get_frame_time(): use gint64 for time
Owen W. Taylor [Wed, 13 Feb 2013 06:03:52 +0000 (01:03 -0500)]
Merge ... Merge GdkFrameHistory into GdkFrameClock
Owen W. Taylor [Wed, 13 Feb 2013 02:42:49 +0000 (21:42 -0500)]
GdkFrameClock: update documentation
Owen W. Taylor [Tue, 12 Feb 2013 23:26:17 +0000 (18:26 -0500)]
GdkFrameTimings: add documentation
Owen W. Taylor [Tue, 12 Feb 2013 20:03:21 +0000 (15:03 -0500)]
GdkFrameClock: Clean up the public API
* remove gdk_frame_clock_get_frame_time_val(); a convenience
function that would rarely be used.
* remove gdk_frame_clock_get_requested() and
::frame-requested signal; while we might want to eventually
be able to track the requested phases for a clock, we don't
have a current use case.
* Make gdk_frame_clock_freeze/thaw() private: they are only
used within GTK+ and have complex semantics.
* Remove gdk_frame_clock_get_last_complete(). Another convenience
function that I don't have a current use case for.
* Rename:
gdk_frame_clock_get_start() => gdk_frame_clock_get_history_start()
gdk_frame_clocK_get_current_frame_timings() => gdk_frame_clock_get_timings()
Owen W. Taylor [Tue, 12 Feb 2013 21:14:24 +0000 (16:14 -0500)]
GdkFrameTimings: strip down to a minimal public API
Since we're not exporting the ability to create your own frame
clock for now, remove the setters for GdkFrameTimings fields.
Also remove all setters and getters for fields that are more
about implementation than about quantities that are meaningful
to the applcation and just access the fields directly within
GDK.
Owen W. Taylor [Tue, 12 Feb 2013 20:47:38 +0000 (15:47 -0500)]
Merge GdkFrameHistory into GdkFrameClock
Now that GdkFrameClock is a class, not interface, there's no real advantage
to splitting the frame history into an aggregate object, so directly
merge it into GdkFrameClock.
Owen W. Taylor [Tue, 12 Feb 2013 20:02:21 +0000 (15:02 -0500)]
Change GdkFrameClock from an interface to a class
It's unlikely that anyone will want to have, say, a GtkWidget that
also acts as a GdkFrameClock, so an abstract base class is as
flexible as making GdkFrameClock an interface, but has advantages:
- If we decide to never make implementing your own frame clock
possible, we can remove the virtualization.
- We can put functionality like history into the base class.
- Avoids the oddity of a interface without a public interface
VTable, which may cause problems for language bindings.
Owen W. Taylor [Wed, 30 Jan 2013 20:09:44 +0000 (15:09 -0500)]
GdkWindow: make the frame clock an inherent property of the window
Instead of making the frame clock a settable property of a window, make
toplevel windows inherently have a frame clock when created (getting
rid of the default frame clock.) We need to create or destroy frame
clocks when reparenting a window to be a toplevel, or to not be a
toplevel, but otherwise the frame clock for a window is immutable.
Owen W. Taylor [Wed, 19 Dec 2012 17:03:16 +0000 (12:03 -0500)]
Add gtk_widget_add_tick_callback(), remove GtkTimeline, etc.
Add a very simple GtkWidget function for an "tick" callback, which
is connected to the ::update signal of GdkFrameClock.
Remove:
- GtkTimeline. The consensus is that it is too complex.
- GdkPaintClockTarget. In the rare cases where tick callbacks
aren't sufficient, it's possible to track the
paint clock with ::realize/::unrealize/::hierarchy-changed.
GtkTimeline is kept using ::update directly to allow using a GtkTimeline
with a paint clock but no widget.
Owen W. Taylor [Wed, 30 Jan 2013 20:11:59 +0000 (15:11 -0500)]
GdkX11DeviceManagerXI2: handle focus events not on a known window
If we get a focus event for a X window we don't recognize, just
ignore it and avoid a g-critical when
_gdk_device_manager_core_handle_focus() is called with a NULL window.
Owen W. Taylor [Wed, 19 Dec 2012 17:49:32 +0000 (12:49 -0500)]
Reimplement _NET_WM_SYNC_REQUEST inside X11 backend
Deprecate gdk_window_enable_synchronized_configure() and
gdk_window_configure_done() and make them no-ops. Implement the
handling of _NET_WM_SYNC_REQUEST in terms of the frame cycle -
we know that all processing will be finished in the next frame
cycle after the ConfigureNotify is received.
Owen W. Taylor [Wed, 19 Dec 2012 17:01:52 +0000 (12:01 -0500)]
Fix up for newer draft of wm-spec
* 64-bit quantities are consistently ordered low-32-bits / high-32-bits
* data.l[4] in _NET_WM_SYNC_REQUEST indicates which counter to update
Owen W. Taylor [Fri, 16 Nov 2012 15:47:17 +0000 (10:47 -0500)]
video-timer: add simple example of PLL-style clock adjustment
The first version of the video-timer simply played back the video
according to the wall clock, and showed each frame at the neareste
presentatin time. But an alternative strategy for playing back
video is that if the frame-rate is an integer-divisor of the
display refresh rate, or very close to that, is to change the playback
speed to complete avoid frame drops and changes in latency.
(This would require resampling audio if present.)
Demonstrate this technique by adding a --pll option to the
video-timer demo.
https://bugzilla.gnome.org/show_bug.cgi?id=685460
Owen W. Taylor [Thu, 15 Nov 2012 22:39:30 +0000 (17:39 -0500)]
video-timer: add a test case for display at a constant frame rate
Add a test case that simulates the timing operaton that goes on
when showing a constant frame rate stream like a video - each
frame is shown at the VBlank interval that is closest to when it
would ideally be timed.
https://bugzilla.gnome.org/show_bug.cgi?id=685460
Owen W. Taylor [Thu, 15 Nov 2012 19:11:41 +0000 (14:11 -0500)]
Add gdk_frame_timings_get_predicted_presentation_time()
For an operation like synchronizing audio to video playback, we need to
be able to predict the time that a frame will be presented. The details
of this depend on the windowing system, so make the backend predict
a presentation time for ::begin-frame and set it on the GdkFrameTimings.
The timing algorithm of GdkFrameClockIdle is adjusted to give predictable
presentation times for frames that are not throttled by the windowing
system.
Helper functions:
gdk_frame_clock_get_current_frame_timings()
gdk_frame_clock_get_refresh_info()
are added for operations that would otherwise be needed multiple times
in different locations.
https://bugzilla.gnome.org/show_bug.cgi?id=685460
Owen W. Taylor [Thu, 15 Nov 2012 00:21:33 +0000 (19:21 -0500)]
Add GDK_DEBUG=frames
Add a debug option to print out detailed statistics about each frame drawn.
https://bugzilla.gnome.org/show_bug.cgi?id=685460
Owen W. Taylor [Wed, 14 Nov 2012 22:54:03 +0000 (17:54 -0500)]
animated-resizing: enhance output
Show the average and standard deviation of the latency in addition to
the frame rate. Add options to print the output in machine-readable form,
and to control the frequency and total number of statistics that will be
output.
https://bugzilla.gnome.org/show_bug.cgi?id=685460
Owen W. Taylor [Wed, 14 Nov 2012 22:24:02 +0000 (17:24 -0500)]
animated-resizing: make circle size a #define
Clean up the code with a #define for circle size. This also allows
determining we're throttled by number-of-requests or number-of-pixels.
https://bugzilla.gnome.org/show_bug.cgi?id=685460
Owen W. Taylor [Wed, 14 Nov 2012 21:50:05 +0000 (16:50 -0500)]
GdkWindowX11: Communicate gdk_frame_timings_get_slept_before() to the compositor
We want the compositor to do different things for frames where
"slept before" is TRUE. Communicate to the compositor that
frame is a no-delay frame (slept_before=FALSE) by ending the frame
by increasing the counter value by 1, and that the frame is a
normal frame (slept_before=TRUE) by increasing the counter value
by 3.
https://bugzilla.gnome.org/show_bug.cgi?id=685460
Owen W. Taylor [Wed, 14 Nov 2012 21:08:08 +0000 (16:08 -0500)]
Add gdk_frame_timings_get/set_slept_before()
Add functions that tell us whether the main loop slept before we drew
a frame. Blocking with the frame clock frozen doesn't count as sleeping.
We'll use this to advertise to the compositor whether we
are drawing as fast as possible (and it should do the same) or timing
frames carefully (and it should do the same.)
https://bugzilla.gnome.org/show_bug.cgi?id=685460
Owen W. Taylor [Wed, 14 Nov 2012 18:26:13 +0000 (13:26 -0500)]
GdkFrameClockIdle: don't start the tiemout/idle when in a frame
Don't start the idle if we're in the middle of painting a frame -
this will prevent us from getting the timing right when starting
the idle after the frame.
https://bugzilla.gnome.org/show_bug.cgi?id=685460
Owen W. Taylor [Wed, 14 Nov 2012 17:49:06 +0000 (12:49 -0500)]
Add GdkFrameHistory and GdkFrameTimings, handle _NET_WM_FRAME_TIMINGS
In order to be able to track statistics about how well we are drawing,
and in order to be able to do sophisticated things with frame timing
like predicting per-frame latencies and synchronizing audio with video,
we need to be able to track exactly when previous frames were drawn
to the screen.
Information about each frame is stored in a new GdkFrameTimings object.
A new GdkFrameHistory object is added which keeps a queue of recent
GdkFrameTimings (this is added to avoid further complicating the
implementation of GdkFrameClock.)
https://bugzilla.gnome.org/show_bug.cgi?id=685460